package com.coszero.utils.data

/**
 * Desc： Byte数据的大小端转换
 * ## 已读卡模块为例 读取的数据排列方式有四种
 * 如何区分大小端
 * 卡号10进制：0129383021  256
 * 读取16进制：7B63A6D    0100 这种是小端,数据从高位往下排,这种的转成10进制不需要调整顺序
 * 读取16进制：6D3AB607   0001  这种是大端，数据从低位往下排
 * - 10进制小端
 * - 10进制大端
 * - 16进制小端 低字节保存在低地址中
 * - 16进制大端 低字节保存在高地址中
 *
 * @author xmqian
 * Email:xmqian93@163.com
 * Date: 2021/6/2 0002 10:35
 */
object LittleBigEndianConverUtils {
    /**
     * @param hex 16进制字符串
     * @return 返回高低位转换后的字符串
     */
    fun reverseHex(hex: String): String {
        var hex = hex
        if (hex.length % 2 != 0) {
            //防止第一位的0位去除了，这里加上
            hex = "0$hex"
        }
        val charArray = hex.toCharArray()
        val length = charArray.size
        val times = length / 2
        var c1i = 0
        while (c1i < times) {
            val c2i = c1i + 1
            val c1 = charArray[c1i]
            val c2 = charArray[c2i]
            val c3i = length - c1i - 2
            val c4i = length - c1i - 1
            charArray[c1i] = charArray[c3i]
            charArray[c2i] = charArray[c4i]
            charArray[c3i] = c1
            charArray[c4i] = c2
            c1i += 2
        }
        return String(charArray)
    }
}
